package pe.gob.mimp.web.controller;

import java.io.*;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import pe.gob.mimp.model.CasoSocial;

import pe.gob.mimp.model.Derivacion;
import pe.gob.mimp.model.Seguimiento;
import pe.gob.mimp.service.CasoSocialService;
import pe.gob.mimp.service.DerivacionService;
import pe.gob.mimp.service.SeguimientoService;

@Controller
@RequestMapping(value = "/download")
public class DownloadController {
	@Autowired
	private DerivacionService derivacionService;
	@Autowired
	private SeguimientoService seguimientoService;
        @Autowired
	private CasoSocialService casoSocialService;

	@RequestMapping(value = "/file")
	public ModelAndView handleRequest(
			@RequestParam(value = "idDerivacion", required = false) Long idDerivacion,
			@RequestParam(value = "idSeguimiento", required = false) Long idSeguimiento,
                        @RequestParam(value = "idCasosocial", required = false) Long idCasosocial,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		Derivacion derivacion;
		Seguimiento seguimiento;
                CasoSocial casosocial;
		try {
			OutputStream out = response.getOutputStream();
                        ByteArrayInputStream in =null;
			if (idSeguimiento != null) {
				seguimiento = seguimientoService
						.getSeguimientoPorId(idSeguimiento);
				response.setHeader("Content-Disposition", "inline;filename=\""
						+ seguimiento.getArchivo() + "\"");
				response.setContentType(seguimiento.getContentType());
				in= new ByteArrayInputStream(seguimiento.getDocumento());
				IOUtils.copy(in, out);
			} else if (idDerivacion != null) {
				derivacion = derivacionService.getDerivacionPorId(idDerivacion);
				response.setHeader("Content-Disposition", "inline;filename=\""
						+ derivacion.getArchivo() + "\"");
				response.setContentType(derivacion.getContentType());
				in= new ByteArrayInputStream(derivacion.getDocumento());
				IOUtils.copy(in, out);
			}else{
                                casosocial = casoSocialService
						.getCasoSocialPorId(idCasosocial);
				response.setHeader("Content-Disposition", "inline;filename=\""
						+ casosocial.getArchivo() + "\"");
				response.setContentType(casosocial.getContentType());
				in= new ByteArrayInputStream(casosocial.getDocumento());
				IOUtils.copy(in, out);
                            
                        }
			out.flush();
			out.close();

		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}
}
